package com.rem.hutool.my5Utils;

import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.TypeUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Method;
import java.lang.reflect.Type;

/**
 * 获取方法的参数和返回值类型（包括Type和Class）
 * 获取泛型参数类型（包括对象的泛型参数或集合元素的泛型类型）
 *
 * @author Rem
 * @date 2020-08-21
 */

public class TypeUtilDemo {
    public static void main(String[] args) {
        Class<?> aClass = TypeUtil.getClass(A.class);
        //System.err.println(aClass.toString());


        //获取方法的参数类型
        Method method = ReflectUtil.getMethod(TypeUtilDemo.A.class, "getOne", Integer.class);
        Type type = TypeUtil.getParamType(method, 0);
        System.err.println(type);

        Type returnType = TypeUtil.getReturnType(method);
        System.err.println(returnType);

    }


    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    static class A {
        private int age;
        private String name;

        public Integer getOne(Integer a) {
            return 1;
        }
    }
}
